<?php
namespace App\Common\Cla\Com\Upload;

use App\Common as com;

class Module extends com\Cla\ClaBase {

	/**
	 * @var \think\file\UploadedFile
	 */
	protected $fileInfo = null; // 需要处理的文件
	
	protected $moduleName = null; // 需要处理的文件
	
	/**
	 * @param \think\file\UploadedFile $file_info 文件类
	 */
	public function __construct( \think\file\UploadedFile $file_info, $module_mame ){
		$this->fileInfo = $file_info;
		$this->moduleName = $module_mame;
	}
	
	/**
	 * 模块处理器
	 * @param array $param 参数数组 <br />
	 * ················· [可空/多选_A/必须](unknown_type)	$param['AAAAA']	说明：AAAAA	<br />
	 * @param array &$return_data [传参]返回数组 <br />
	 * ················· [必须](int)		$return_data['status_str']	说明：返回状态说明	<br />
	 * ················· [必须](array)	$return_data['api_return_data']	说明：api返回数据(api返回时使用)	<br />
	 * 		默认有的数据：[
	 * 			'domain' => '', // 域名
	 * 			'url' => '', // url（不包含域名）
	 * 		]
	 * ················· [可空/多选_A/必须](unknown_type)	$return_data['AAAAA']	说明：AAAAA	<br />
	 * @return int 处理结果。[0]失败 [1]完成
	 */
	public function handle( array $param = [], array &$return_data= [] ){
		// ...
		if( ! is_array( $param['config_param'] ) ) return 0;
		//
		if( empty( $this->moduleName ) ) return 1;
		// 加载处理器
		$module_obj = $this->newModuleClass();
		if( is_null( $module_obj ) ){
			$return_data['status_str'] = '处理器不存在';
			return -1;
		}
		// 执行处理器
		$handle_status = $module_obj->handle( $param, $return_data );
		//
		return $handle_status;
	}
	
	/**
	 * 获取sid类路径
	 * @return string 类路径
	 */
	protected function getModuleClassPath(){
		if( $this->moduleName == '' ) return '';
		return __NAMESPACE__ . "\\Module\\{$this->moduleName}";
	}
	
	/**
	 * 获取并实例化sid类
	 * @return null|obj 实例化类，[mull]实例化失败(类不存在)
	 */
	protected function newModuleClass(){
		$module_class_path = $this->getModuleClassPath();
		//
		if( empty( $module_class_path ) ) return null;
		if( ! method_exists ( $module_class_path, 'handle' ) ) return null;
		return (new $module_class_path( $this->fileInfo ));
	}
	
}
